package com.kun.peng.system.service;

import com.kun.peng.system.domain.Role;
import com.kun.peng.system.service.dto.RoleDto;
import com.kun.peng.system.service.dto.RoleQueryCriteria;
import com.kun.peng.system.service.dto.RoleSmallDto;
import com.kun.peng.system.service.dto.UserDto;
import org.springframework.security.core.GrantedAuthority;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Set;

/**
 * Created on 2021/11/19.
 *
 * @author xuebaopeng
 * Description
 */
public interface RoleService {
    /**
     * 查询全部数据
     * @return
     */
    List<RoleDto> queryAll();
    /**
     * 根据ID查询
     * @param id
     * @return
     */
    RoleDto findRoleById(long id);
    /**
     * 修改绑定的菜单
     * @param resources
     * @param roleDTO
     */
    void updateMenu(Role resources, RoleDto roleDTO);
    /**
     * 待条件分页查询
     * @param criteria 条件
     * @return /
     */
    List<RoleDto> queryAll(RoleQueryCriteria criteria);
    /**
     * 根据菜单Id查询
     * @param menuIds
     * @return
     */
    List<Role> findInMenuId(List<Long> menuIds);

    /**
     * 根据用户ID查询
     * @param id 用户ID
     * @return
     */
    List<RoleSmallDto> findByUsersId(Long id);

    /**
     * 获取用户权限信息
     * @param user 用户信息
     * @return 权限信息
     */
    List<GrantedAuthority> mapToGrantedAuthorities(UserDto user);

    /**
     * 解绑菜单
     * @param id
     */
    void untiedMenu(Long id);


    /**
     * 导出数据
     * @param queryAll 待导出的数据
     * @param response
     * @throws IOException
     */
    void download(List<RoleDto> queryAll, HttpServletResponse response) throws IOException;

    /**
     * 创建
     * @param resources
     */
    void create(Role resources);

    /**
     * 编辑
     * @param resources
     */
    void update(Role resources);


    /**
     * 删除
     * @param ids
     */
    void delete(Set<Long> ids);

    /**
     * 验证是否被用户关联
     * @param ids
     */
    void verification(Set<Long> ids);

    /**
     * 根据部门查询
     * @param deptIds
     * @return
     */
    int countByDepts(Set<Long> deptIds);
}
